home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch12 / ReflAt.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1999-06-16  |  3.6 KB  |  128 lines

  1. VERSION 5.00
  2. Begin VB.Form frmReflAt 
  3.    Caption         =   "ReflAt"
  4.    ClientHeight    =   4425
  5.    ClientLeft      =   2325
  6.    ClientTop       =   495
  7.    ClientWidth     =   4215
  8.    DrawMode        =   14  'Copy Pen
  9.    LinkTopic       =   "Form1"
  10.    PaletteMode     =   1  'UseZOrder
  11.    ScaleHeight     =   4425
  12.    ScaleWidth      =   4215
  13.    Begin VB.CheckBox chkReflect 
  14.       Caption         =   "Reflect"
  15.       Height          =   255
  16.       Left            =   1680
  17.       TabIndex        =   1
  18.       Top             =   4080
  19.       Width           =   855
  20.    End
  21.    Begin VB.PictureBox Pict 
  22.       Height          =   3975
  23.       Left            =   0
  24.       ScaleHeight     =   -7
  25.       ScaleLeft       =   -1
  26.       ScaleMode       =   0  'User
  27.       ScaleTop        =   6
  28.       ScaleWidth      =   7
  29.       TabIndex        =   0
  30.       Top             =   0
  31.       Width           =   4215
  32.    End
  33. Attribute VB_Name = "frmReflAt"
  34. Attribute VB_GlobalNameSpace = False
  35. Attribute VB_Creatable = False
  36. Attribute VB_PredeclaredId = True
  37. Attribute VB_Exposed = False
  38. Option Explicit
  39. Private NumSegments As Integer
  40. ' Hold two points for a line segment.
  41. Private Type Segment
  42.     fr_pt(1 To 3) As Single
  43.     to_pt(1 To 3) As Single
  44.     fr_tr(1 To 3) As Single
  45.     to_tr(1 To 3) As Single
  46. End Type
  47. Private Segments() As Segment
  48. Private Const LineX1 = 0.75
  49. Private Const LineY1 = -0.5
  50. Private Const LineX2 = 3.75
  51. Private Const LineY2 = 5.5
  52. ' Create the data.
  53. Private Sub CreateData()
  54.     ' Create the axes.
  55.     MakeSegment 0, 0, 5, 0
  56.     MakeSegment 0, 0, 0, 5
  57.     ' Create the line of reflection.
  58.     MakeSegment LineX1, LineY1, LineX2, LineY2
  59.     ' Create an object to manipulate.
  60.     MakeSegment 1, 3, 2, 3
  61.     MakeSegment 2, 3, 2, 4
  62.     MakeSegment 2, 4, 1, 4
  63.     MakeSegment 1, 4, 1, 3
  64.     MakeSegment 1, 3, 2, 4
  65.     MakeSegment 2, 3, 1, 4
  66. End Sub
  67. ' Draw the transformed data.
  68. Private Sub DrawSegments(pic As Object)
  69. Dim dx As Single
  70. Dim dy As Single
  71. Dim M(1 To 3, 1 To 3) As Single
  72. Dim i As Integer
  73. Dim x1 As Single
  74. Dim y1 As Single
  75. Dim x2 As Single
  76. Dim y2 As Single
  77.     pic.Cls
  78.     ' Transform the data.
  79.     If chkReflect.Value = vbChecked Then
  80.         dx = LineX2 - LineX1
  81.         dy = LineY2 - LineY1
  82.         m2ReflectAcross M, LineX1, LineY1, dx, dy
  83.     Else
  84.         m2Identity M
  85.     End If
  86.     TransformPicture M
  87.     For i = 1 To NumSegments
  88.         x1 = Segments(i).fr_tr(1)
  89.         y1 = Segments(i).fr_tr(2)
  90.         x2 = Segments(i).to_tr(1)
  91.         y2 = Segments(i).to_tr(2)
  92.         pic.Line (x1, y1)-(x2, y2)
  93.     Next i
  94. End Sub
  95. ' Redraw the picture.
  96. Private Sub chkReflect_Click()
  97.     Pict.Refresh
  98. End Sub
  99. Private Sub Form_Load()
  100.     CreateData
  101. End Sub
  102. ' Make a new segment.
  103. Private Sub MakeSegment(x1 As Single, y1 As Single, x2 As Single, y2 As Single)
  104.     NumSegments = NumSegments + 1
  105.     ReDim Preserve Segments(1 To NumSegments)
  106.     Segments(NumSegments).fr_pt(1) = x1
  107.     Segments(NumSegments).fr_pt(2) = y1
  108.     Segments(NumSegments).fr_pt(3) = 1
  109.     Segments(NumSegments).to_pt(1) = x2
  110.     Segments(NumSegments).to_pt(2) = y2
  111.     Segments(NumSegments).to_pt(3) = 1
  112. End Sub
  113. ' Transform all segments except the axes.
  114. Private Sub TransformPicture(M() As Single)
  115. Dim i As Integer
  116.     For i = 1 To 2
  117.         m2PointCopy Segments(i).fr_tr, Segments(i).fr_pt
  118.         m2PointCopy Segments(i).to_tr, Segments(i).to_pt
  119.     Next i
  120.     For i = 3 To NumSegments
  121.         m2Apply Segments(i).fr_pt, M, Segments(i).fr_tr
  122.         m2Apply Segments(i).to_pt, M, Segments(i).to_tr
  123.     Next i
  124. End Sub
  125. Private Sub Pict_Paint()
  126.     DrawSegments Pict
  127. End Sub
  128.